﻿#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>

//int main()
//{
//	int a = 1;
//	char* p = (char*)&a;
//	if (*p == 1)
//		printf("小端\n");
//	else
//		printf("大端\n");
//	return 0;
//}

//int check1()
//{
//	int a = 1;
//	return *(char*)&a;
//}
//
//int check2()
//{
//	union
//	{
//		char c;
//		int i;
//	}un;
//	un.i = 1;
//	return un.c;
//}
//
//int main()
//{
//	int ret = check1();
//	if (ret == 1)
//		printf("小端\n");
//	else
//		printf("大端\n");
//	return 0;
//}

//struct A
//{
//	int a;
//	short b;
//	int c;
//	char d;
//}A;
//struct B
//{
//	int a;
//	short b;
//	char c;
//	int d;
//}B;
//
//int main()
//{
//	sizeof(A);
//	sizeof(B);
//
//	return 0;
//}





//在VS2013下，默认对齐数为8字节，这个结构体所占的空间大小是（ ）字节

//typedef struct {
//	int a;
//	char b;
//	short c;
//	short d;
//}AA_t;

//12


#include <string.h>
int main()
{
	unsigned char puc[4]; //4个字节

	struct tagPIM
	{
		unsigned char ucPim1;        //占一个字节
		unsigned char ucData0 : 1;
		unsigned char ucData1 : 2;
		unsigned char ucData2 : 3;
	}*pstPimData;

	pstPimData = (struct tagPIM*)puc; //定义了一个结构体指针指向puc
	memset(puc, 0, 4);//将4个字节内容都设置为 0
	pstPimData->ucPim1 = 2;
	pstPimData->ucData0 = 3;
	pstPimData->ucData1 = 4;
	pstPimData->ucData2 = 5;
	printf("%02x %02x %02x %02x\n", puc[0], puc[1], puc[2], puc[3]);
	return 0;
}
//相当于空间先开辟好了
//00000010 00000000 00000000 00000000
//00000010 00000001 00000000 00000000  3 只存进去 1 位
//00000010 00000001 00000000 00000000  4 存进去两位 100
//00000010 00101001 00000000 00000000  5 存进去 101
//  02        29       00	    00
//  
//
